#!/usr/bin/env node
// deploy-app.js - 快速部署特定应用的简化脚本

import { execSync } from 'child_process';
import { fileURLToPath } from 'url';
import path from 'path';
import fs from 'fs';

// 获取当前文件的目录路径
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 命令行参数解析
const args = process.argv.slice(2);
const appName = args[0];
const skipBuild = args.includes('--skip-build');
const envArg = args.find(arg => arg.startsWith('--env='));
const env = envArg ? envArg.split('=')[1] : 'production';

// 检查是否提供了应用名称
if (!appName) {
  console.error('错误: 请提供应用名称');
  console.log('使用方法: node deploy-app.js <应用名称> [--skip-build] [--env=production|development]');
  console.log('例如: node deploy-app.js vue-base');
  process.exit(1);
}

// 检查应用是否存在
const appDir = path.resolve(__dirname, `./apps/${appName}`);
if (!fs.existsSync(appDir)) {
  console.error(`错误: 应用 "${appName}" 不存在`);
  
  // 列出可用的应用
  const appsDir = path.resolve(__dirname, './apps');
  if (fs.existsSync(appsDir)) {
    const apps = fs.readdirSync(appsDir)
      .filter(dir => fs.statSync(path.join(appsDir, dir)).isDirectory() && 
              fs.existsSync(path.join(appsDir, dir, 'package.json')));
    
    if (apps.length > 0) {
      console.log('可用的应用:');
      apps.forEach(app => console.log(`- ${app}`));
    }
  }
  
  process.exit(1);
}

// 创建环境变量文件（如果不存在）
async function ensureEnvFile() {
  const envFile = path.resolve(__dirname, './.env');
  const appEnvFile = path.resolve(appDir, `./.env.${env}`);
  const appCdnFile = path.resolve(appDir, './.env.cdn');
  
  // 检查是否有任何配置文件存在
  if (!fs.existsSync(envFile) && !fs.existsSync(appEnvFile) && !fs.existsSync(appCdnFile)) {
    console.log('未找到配置文件，将创建默认配置...');
    
    try {
      // 运行初始化命令
      execSync(`node deploy-cdn.js init`, { stdio: 'inherit' });
    } catch (error) {
      console.error('创建配置文件失败:', error);
      process.exit(1);
    }
  }
}

// 构建应用
async function buildApp() {
  if (skipBuild) {
    console.log(`跳过构建 ${appName}`);
    return;
  }
  
  console.log(`正在构建 ${appName}...`);
  try {
    execSync(`pnpm --filter ${appName} build`, { stdio: 'inherit' });
    console.log(`${appName} 构建成功`);
  } catch (error) {
    console.error(`构建 ${appName} 失败:`, error);
    process.exit(1);
  }
}

// 部署应用
async function deployApp() {
  console.log(`正在部署 ${appName}...`);
  try {
    execSync(`node deploy-cdn.js ${appName}`, { stdio: 'inherit' });
  } catch (error) {
    console.error(`部署 ${appName} 失败:`, error);
    process.exit(1);
  }
}

// 主函数
async function main() {
  console.log(`准备部署应用: ${appName} (环境: ${env})`);
  
  // 确保环境变量文件存在
  await ensureEnvFile();
  
  // 构建应用
  await buildApp();
  
  // 部署应用
  await deployApp();
  
  console.log(`应用 ${appName} 部署完成!`);
}

// 执行主函数
main().catch(error => {
  console.error('部署失败:', error);
  process.exit(1);
}); 